/**
 * 文件名称:  Login.java
 * 文件序号:  序号
 * 内容描述:  文件简单描述，多行换行书写
 * 版权声明:  山东鸿蝶信息技术有限公司
 * 创建用户:  zhangkai
 * 创建日期:  2017/1/11 11:48
 * 修改用户:  无
 * 修改日期:  无
 * 修改说明:  无
 * 文件版本:  V1.0
 * 文件路径:
 */

package com.hongdee.rbac.login.controller;

import com.hongdee.base.entity.ResultEntity;
import com.hongdee.common.util.TokenUtil;
import com.hongdee.rbac.login.service.ILoginService;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.mapping.TableOwner;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * 名  称:Login
 * 类  型: class
 * 描  述: 处理登户登录时相关事项，密码验证、资源获取
 * 路  径:com.hongdee.rbac.login
 * 作  者:zhangkai
 * 日  期:2017/1/11 11:48
 */
@RestController
@RequestMapping("/rbac/login")
public class LoginController {
    private Log logger = LogFactory.getLog(this.getClass());
    /**
     * 方法名称:doLogin
     * 方法描述:用户登录接口
     * 返回内容: ResultEntity
     * 异常说明:
     * 创建用户:
     * 创建时间:
     * 修改用户:
     * 修改时间:
     * 修改内容:
     */
    @Autowired
    private ILoginService loginService;

    @RequestMapping("/doLogin")
    @ResponseBody
    public ResultEntity doLogin(@RequestParam(name = "username", defaultValue = "") String username,
                                @RequestParam(name = "password", defaultValue = "") String password,
                                @RequestParam(name="clientid",defaultValue = "")String clientid) throws Exception {

        if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) {
            throw new Exception("用户名或密码不能为空！");
        }

        ResultEntity res = new ResultEntity();
        //登录验证
        Map data = this.loginService.login(username, password,clientid);
        res.setMsg("登录成功！");
        res.setSuccess(true);
        res.setData(data);
        return res;

    }

    /**
     * 方法名称:left
     * 方法描述:根据子系 ID 查询底部菜单
     * <p>
     * 返回内容:
     * 异常说明:
     * 创建用户:
     * 创建时间:
     * 修改用户:
     * 修改时间:
     * 修改内容:
     */
    @RequestMapping("/subSys")
    @ResponseBody
    public ResultEntity subSys(@RequestParam(name = "uid", defaultValue = "") String uid,
                               @RequestParam(name = "token", defaultValue = "") String token) throws Exception {
        ResultEntity res = new ResultEntity();
        List dataList = this.loginService.child(uid, token);
        res.setDataList(dataList);
        res.setTotal((long) dataList.size());
        res.setSuccess(true);
        res.setMsg("查询成功！");
        return res;
    }

    /**
     * 方法名称: leftTree
     * 方法描述: 根据子系统 ID 查询其下属所有的资源情况
     * 返回内容: 资源的树型结构
     * 异常说明:
     * 创建用户:
     * 创建时间:
     * 修改用户:
     * 修改时间:
     * 修改内容:
     */
    @RequestMapping("/leftTree")
    @ResponseBody
    public ResultEntity leftTree(@RequestParam(name = "uid", defaultValue = "") String uid,
                                 @RequestParam(name = "token", defaultValue = "") String token,
                                 @RequestParam(name = "resId", defaultValue = "") String resId, HttpServletRequest request) throws Exception {
        ResultEntity res = new ResultEntity();
        Map map = request.getParameterMap();
        List dataList = this.loginService.leftTree(resId, uid);
        res.setDataList(dataList);
        res.setTotal((long) dataList.size());
        res.setSuccess(true);
        res.setMsg("查询成功！");
        return res;
    }

    /**
     * 根据当前登录用户与所在的页面，获取其有权限的控钮
     *
     * @param uid     登录用户 ID
     * @param token   登录用户 Token
     * @param resPath 所在页面
     * @param request request 请求句柄
     * @return Btn 列表
     * @throws Exception 基类异常
     */
    @RequestMapping("/btn")
    @ResponseBody
    public ResultEntity btn(@RequestParam(name = "uid", defaultValue = "") String uid,
                            @RequestParam(name = "token", defaultValue = "") String token,
                            @RequestParam(name = "resPath", defaultValue = "") String resPath, HttpServletRequest request) throws Exception {
        if (StringUtils.isEmpty(resPath)) {
            throw new Exception("资源路径不能为空");
        }
        ResultEntity res = new ResultEntity();
        //获取按钮资源
        Map<String, List<Map<String, Object>>> map = TokenUtil.getBtnMap(uid);
        if (map.containsKey(resPath.trim())) {
            List btnList = map.get(resPath);
            res.setDataList(btnList);
        }
        res.setSuccess(true);
        res.setMsg("查询成功！");
        return res;

    }

}
